#ifndef __VTOR_SDI_H__
#define __VTOR_SDI_H__

#ifdef __cplusplus
extern "C" {
#endif

#include "vtor_elec_module_config.h"

#ifdef __VTOR_SDI__

#define VtorSdi_LowLevel		0
#define VtorSdi_HighLevel		1

#define VtorSdi_DataOutput		0
#define VtorSdi_DataInput		1

typedef struct VtorSdiStruct
{
	uint8_t sdiPortIdx;
	uint8_t sdiIrqCnt;
	uint8_t sdiRxByte;
	int32_t sdiRxTimeout;
	
// Serial Device Interface
}VtorSdi;

// 初始化和发送数据
void VtorSdi_Init(void);

void VtorSdi_WriteScl(VtorSdi* sdi, uint8_t level);
uint8_t VtorSdi_ReadScl(VtorSdi* sdi);
void VtorSdi_WriteSda(VtorSdi* sdi, uint8_t level);
uint8_t VtorSdi_ReadSda(VtorSdi* sdi);
void VtorSdi_Delay(VtorSdi* sdi, int16_t tick);

// 开漏输出模式，或者输入中断模式（有些芯片两者可以共存）
void VtorSdi_SetDataDir(VtorSdi* sdi, uint8_t dir);

// 发送时选择开漏输出模式，发送完选择输入中断
void VtorSdi_WriteBuf(VtorSdi* sdi, uint8_t* buf, int16_t len);
void VtorSdi_ReadBuf(VtorSdi* sdi, uint8_t* buf, int16_t len);
// scl下降沿中断，开始分析数据
void VtorSdi_SclHandler(VtorSdi* sdi);
void VtorSdi_IdleCallback(VtorSdi* sdi);
void VtorSdi_ReceiveByteCallback(VtorSdi* sdi, uint8_t rxByte);

// 轮询查询数据是否接收完成
void VtorSdi_ReceiveIdleTask(void);

#endif // __VTOR_SDI__

#ifdef __cplusplus
}
#endif

#endif

